package reflect;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 注解是JDK5推出时推出的一个特性.可以辅助我们在反射机制中操作对象使用
 * java内置了很多注解,不同的注解也有不同的作用.
 * 例如:
 * @Override:该注解是标注在方法上的,用于告知编译器此方法是重写的超类
 *           方法,如果该方法的声明与超类不符时,编译器会提示错误.
 *
 * 注解的声明:
 * public @interface 注解名{
 *     参数类型 参数名();
 *     ...
 * }
 *
 * 使用注解的语法:
 * @注解名
 * 如果注解定义了参数,可以在使用时传入参数
 * @注解名(实参...)
 *
 * 声明注解时有两个注解是用来给注解标注信息的:
 * @Target:声明该注解用于标注的位置,例如:方法上,类上等等
 * @Retention:声明该注解保留的级别
 *            可选取的值在枚举类型RetentionPolicy中定义,我们定义的
 *            注解通常只选取RUNTIME,这个级别表示该注解会被保留在编译
 *            后的class文件中并且可供反射机制获取及操作.
 *
 *
 */

/*
    需要同时在多个地方使用该注解时,应当如下传参给Target
    @Target({ElementType.TYPE,ElementType.METHOD,...})
    这里的{}是数组的静态初始化,相当于传入一个数组,包含多个可标注位置.
 */
@Target(ElementType.TYPE)//仅在类上使用该注解
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoRunClass {
}








